package com.xiaoma.thread.join;

/**
 * https://my.oschina.net/goldenshaw/blog/802620
 * @author maj
 * @ClassName JoinTest
 * @Description
 * @date 2020-09-13 14:05
 *
 *
 * 从定义中可知，除了 wait/notify 外，调用 join 方法也会让线程处于 WAITING 状态。
 *
 * join 的机制中并没有显式的 wait/notify 的调用，但可以视作是一种特殊的，隐式的 wait/notify 机制。
 *
 * 假如有 a，b 两个线程，在 a 线程中执行 b.join()，相当于让 a 去等待 b，此时 a 停止执行，等 b 执行完了，系统内部会隐式地通知 a，使 a 解除等待状态，恢复执行。
 *
 * 换言之，a 等待的条件是 “b 执行完毕”，b 完成后，系统会自动通知 a。
 *
 *
 *
 * https://www.cnblogs.com/duanxz/p/5038471.html
 */
public class JoinTest {

  public static void main(String[] args) throws Exception {
    Add add=new Add();
    Thread t1=new Thread(add);
    t1.setName("t1");
    Thread t2=new Thread(add);
    t2.setName("t2");
    Thread t3=new Thread(add);
    t3.setName("t3");





    t1.start();
    //这里是顺序执行，让main线程阻塞，等t1执行完后，在执行t2.start() 启动t2线程
    t1.join();//等待t1结束，再执行后面的代码

    t2.start();
    t2.join();

    t3.start();
    t3.join();

    System.out.println("countAll"+add.getCount());
  }

}
